package editorsvg.editor.formas;

import editorsvg.editor.atributos.AtrLongitud;
import editorsvg.propiedades.GrupoPropiedades;
import editorsvg.propiedades.PropiedadDouble;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;

/**
 * Forma que representa un circulo.
 * @author Jorge Berjano
 */
public class Circulo extends Forma {

    private AtrLongitud cx = new AtrLongitud();
    private AtrLongitud cy = new AtrLongitud();
    private AtrLongitud radio = new AtrLongitud();
    private Ellipse2D elipse = new Ellipse2D.Double();
    private static GrupoPropiedades propiedadesForma;

    @Override
    public Object clone() throws CloneNotSupportedException {
        Circulo clon = (Circulo) super.clone();        
        clon.cx = (AtrLongitud) cx.clone();
        clon.cy = (AtrLongitud) cy.clone();
        clon.radio = (AtrLongitud) radio.clone();
        clon.elipse = (Ellipse2D) elipse.clone(); 
        return clon;
    }

    @Override
    public String getNombreTag() {
        return "circle";
    }

    @Override
    public Shape getShape() {        
        return elipse;
    }

    @Override
    public void actualizar() {
        if (cx.getValor() != null && cy.getValor() != null && radio.getValor() != null) {
            elipse.setFrameFromCenter(cx.getValor(), cy.getValor(), cx.getValor() + radio.getValor(), cy.getValor() + radio.getValor());
        }
    }

    public void setCentro(Point2D centro) {
        cx.setValor(centro.getX());
        cy.setValor(centro.getY());        
    }

    public Point2D getCentro() {
        return new Point2D.Double(cx.getValor(), cy.getValor());
    }

    public AtrLongitud cx() {
        return cx;
    }

    public AtrLongitud cy() {
        return cy;
    }

    public AtrLongitud radio() {
        return radio;
    }

    public void setCx(Double valor) {
        cx.setValor(valor);
    }

    public Double getCx() {
        return cx.getValor();
    }

    public void setCy(Double valor) {
        cy.setValor(valor);
    }

    public Double getCy() {
        return cy.getValor();
    }

    public void setRadio(Double valor) {
        radio.setValor(valor);
    }

    public Double getRadio() {
        return radio.getValor();
    }

    @Override
    public GrupoPropiedades getPropiedades() {
        if (propiedadesForma == null) {
            propiedadesForma = new GrupoPropiedades("Circulo");
            propiedadesForma.agregarPropiedad(new PropiedadDouble("cx"));
            propiedadesForma.agregarPropiedad(new PropiedadDouble("cy"));
            propiedadesForma.agregarPropiedad(new PropiedadDouble("radio", "r"));
        }
        return propiedadesForma;
    }
}
